package com.probox.common.entity.service.product;

import java.util.HashMap;
import java.util.List;

import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.extension.service.IService;
import com.probox.product.api.domain.*;
import com.probox.common.entity.domain.product.ProductInfo;
import com.probox.common.entity.domain.product.vo.*;

/**
 * 商品信息Service接口
 *
 *
 * @date 2021-05-28
 */
public interface IProductInfoService extends IService<ProductInfo> {

    /**
     * 是否使用
     * @param info
     * @return
     */
    public Boolean useProduct(ProductInfo info);

    /**
     * 获得小程序二维码
     * @param productUid
     * @return
     */
    public String getAppltImg(Long productUid, Long platformUid);

    /**
     * 查询是否被单位引用
     * @param unitUid
     * @return
     */
    public Boolean productUnitUse(Long unitUid);

    /**
     * 查询商品信息列表
     *
     * @param productInfoQuery 商品信息
     * @return 商品信息集合
     */
    public List<ProductInfoVo> queryList(ProductInfoQuery productInfoQuery);

    /**
     * 前端获取商品信息列表
     *
     * @param productInfoQuery
     * @return
     */
    public List<LunWenVo> select(LunWenVo productInfoQuery);

    public int getDownloadJiFen(LunWenVo lunWenVo);

    /**
     * 新增商品信息
     *
     * @param productSaveVo 商品信息
     * @return 结果
     */
    public boolean insertProductInfo(ProductSaveVo productSaveVo,Long one);

    /**
     * 修改商品信息
     *
     * @param productSaveVo 商品信息
     * @return 结果
     */
    public boolean updateProductInfo(ProductSaveVo productSaveVo,Long one);

    /**
     * 批量删除商品信息
     *
     * @param productUids 需要删除的商品信息ID
     * @return 结果
     */
    public boolean deleteProductInfoByIds(Long[] productUids);

    /**
     * 获得商品详细的vo
     *
     * @param productUid
     * @return
     */
    public ProductSaveVo getSaveVo(Long productUid);

    /**
     * 查询商品详情的页面
     *
     * @param productUid
     * @return
     */
    public ProductViewVo getViewVo(Long productUid);

    /**
     * 通过uid集查询商品信息
     *
     * @param uids 商品id集
     * @return
     */
    public List<ProductInfoVo> getProductList(String uids);

    /**
     * 查询修改库存的数据
     *
     * @param productUid
     * @return
     */
    public List<ProductEditVo> queryEditVo(Long productUid);

    /**
     * 用于修改库存和修改
     *
     * @param vo
     * @return
     */
    public Boolean updateEdit(ProductEditAllVo vo);

    /**
     * 用于审核,提交,上下架的操作以及日志的添加
     *
     * @param productInfoEditVo 商品信息Vo
     * @return
     */
    public boolean editAndSaveLog(ProductInfoEditVo productInfoEditVo);

    /**
     * 前端获取商品信息列表
     *
     * @param productInfoQuery
     * @return
     */
    public Integer selectCount(LunWenVo productInfoQuery);

    public Integer selectCountAdmin(ProductInfoQuery productInfoQuery);

    /**
     * api获得商品详情信息
     *
     * @param productUid
     * @return
     */
    public ProductInfoVo getProductView(Long productUid);

    public LunWenVo getLunWenView(Long productUid);

    /**
     * 销售产品
     * @param vo
     */
    public void saleProduct(SaleProductVo vo);

    public int incProductDownloadCount(Long productUid);

    public int incProductBuyCount(Long productUid);

    /**
     *  api获取商品sku的详细信息
     * @param productUid
     * @return
     */
    public ProductSkuVo getProductSkuVo(Long productUid);

    public List<HashMap> getGategoryProduct(Long categoryUid);

    /**
     *  查询猜你喜欢的商品
     * @param productInfoQuery
     * @return
     */
    public List<ProductInfoVo> selectLike(ProductInfoQuery productInfoQuery);


    public ProductInfo getPro(Long productUid);

    /**
     * 获取h5的二维码
     * @param productUid
     */
    public HashMap getH5(Long productUid);

    /**
     * 商品一键上架
     * @param productUid
     * @return
     */
    public boolean getGrounding(Long productUid);


    /**
     * 获取测试的分类
     * @return
     */
    public List<PddCategory> category();


    public Boolean goods(List<PddCategory> listCate);

    /**
     * 查询商品详情 api
     * @param proUid
     * @return
     */
    public ProductInfoVo getProductDetail(Long proUid);

    /**
     * 查询sku详情 api
     * @param skuId
     * @return
     */
    public SkuApi getSkuDetail(Long skuId);
}
